package com.gxgeek.interview.t1;

import org.junit.Test;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;

import static java.util.Arrays.asList;

/**
 * Created by gx on 2017/4/26.
 */
public class Written2 {
    /**
     * 题目：有1、2、3、4四个数字，
     * 能组成多少个互不相同且无重复数字的三位数 都是多少
     */
    @Test
    public void problem1() {
        for (int i = 1; i < 5; i++) {
            for (int j = 1; j < 5; j++) {
                for (int k = 1; k < 5; k++) {
                    if (i != k && k != j && i != j) {
                        System.out.println(i+" "+j+" "+k);
                    }
                }
            }
        }
    }

    /**
     * 程序2
     * 题目：
     * 企业发放的奖金根据利润提成。
     * 利润(I)低于或等于10万元时，奖金可提10%;
     * 利润高于10万元，低于20万元时，低于10万元的部分按 10%提成， 高于10万元的部分，可提成7.5%;
     * 20万到40万之间时，高于20万元的部分，可提成5%;
     * 40万到60万之间时高于40万元的部分，可提成3%;60万到100万之间时，
     * 高于60万元的部分，可提成1.5%，
     * 高于100万元时，超过100万元的部分按1%提成，从键盘输入当月利润，求 应发放奖金总数
     */
    public void problem2() {

    }

    /**
     * 【程序3】
     * 题目：一个整数，它加上100后是一个完全平方数，
     * 再加上168又是一个完全平方数，请问该数是多少
     */
    @Test
    public void problem3() {
        int i = 0;
        while (true) {
            if (Math.sqrt(i + 100) % 1 == 0) {//平方根
                if (Math.sqrt(i + 268) % 1 == 0) {
                    System.out.println(i);
                }
            }
            i++;
        }

    }

    //题目：输入某年某月某日，判断这一天是这一年的第几天
    public void problem4() {


    }


    //题目：输入三个整数x,y,z，请把这三个数由小到大输出。
    // 冒泡
    @Test
    public void problem5() {
        int a = 2;
        int b = 1;
        int c = 5;

        int max = a > b ? (a > c ? a : c) : (b > c ? b : c);
        if (a > b) {
            int t = a;
            a = b;
            b = t;
        }
        System.out.println("三个数字由小到大排列为： " + a + " " + b + " " + c);

        System.out.println(max);

    }

    /**
     * 【程序6】
     * 题目：输出9*9口诀。
     */
    @Test
    public void problem6() {
        for (int i = 1; i <= 9; i++) {
            for (int j = 1; j <= i; j++) {
                System.out.print(i + "+" + j + "=" + i * j + "  ");
            }
            System.out.println();
        }
    }

    /**
     * 【程序7】
     * 题目：猴子吃桃问题：猴子第一天摘下若干个桃子，当即吃了一半，还不瘾，又多吃了一个
     * 第二天早上又将剩下的桃子吃掉一半，又多吃了一个。以后每天早上都吃了前一天剩下 的一半零一个。
     * 到第10天早上想再吃时，见只剩下一个桃子了。求第一天共摘了多少。
     */
    @Test
    public void problem7() {
        int s = 1;
        for (int i = 1; i < 10; i++) {
            s = (s + 1) * 2;
        }
        System.out.println(s);


    }

    /**
     * 【程序8】
     * 题目：两个乒乓球队进行比赛，各出三人。甲队为a,b,c三人，乙队为x,y,z三人。
     * 已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比，c说他不和x,z比，请编程序找出三队赛手的名单。
     */
    public void problem8() {

    }


    /**
     * 【程序9】
     * <p>
     * 题目：打印出如下图案(菱形)
     * <p>
     * <p>
     * **
     * <p>
     * ****
     * <p>
     * ******
     * <p>
     * ****
     * <p>
     * **
     */
    @Test
    public void problem9() {
        int lenght = 7;
        int width = 7;
        for (int j = 0; j < lenght; j++) {
            for (int i = 0; i < width; i++) {
                System.out.print("*");

            }
            System.out.println();
            System.out.println();
            width--;
        }

    }


    /**
     * 【程序10】
     * 题目：有一分数序列：2/1，3/2，5/3，8/5，13/8，21/13...求出这个数列的前20项之和。
     */
    @Test
    public void problem10() {
        System.out.println(sum(2, 1, 20));
    }

    public static double sum(double a, double b, int count) {
        if (count == 0) {
            return 0;
        }
        return div(a, b) + sum(a + b, a, --count);
    }


    private static final int DEF_DIV_SCALE = 10;

    public static Double div(Double v1, Double v2) {
        BigDecimal b1 = new BigDecimal(v1.toString());
        BigDecimal b2 = new BigDecimal(v2.toString());
        return b1.divide(b2, DEF_DIV_SCALE, BigDecimal.ROUND_HALF_UP)
                .doubleValue();
    }

    public static Double add(Double v1, Double v2) {
        BigDecimal b1 = new BigDecimal(v1.toString());
        BigDecimal b2 = new BigDecimal(v2.toString());
        return new Double(b1.add(b2).doubleValue());
    }

}
